#pragma once
#pragma once
#include<time.h>
#include <iostream>
#include "bTree.h"

//struct.h
using namespace std;
#define MaxBorrowDay 30//最大的结束时间
#define MaxBorrowNum 20//最大的借书数量
#define FineDay 1//逾期1天就可以罚款
#define MaxReborrowDay 2//续借的次数

//typedef struct {
//	int BookID;
//	char name[20];
//	char AuthorName[20];
//	char Publisher[20];
//	int SumBook;//该本书的库存
//	char ISBN[14];//ISBN的位数是13位
//	bool exist;
//	double price;
//}Book;
typedef struct {
	int reader_num;//读者需不需要id
	long long int readerID;
	char name[20];//读者姓名  !!!!!
	char password[13];
	int sex;//sex用0或1表示比较方便  1表示男性，0表示女性
	int exist;//用户是否有效 用1或0表示
	double fine;//欠款金额
}Reader;
typedef struct {
	int id;//借书记录的id
	char OnlyID[19]; //借书时生成的唯一的ID
	int BookId; //图书id号(这本书的id号)
	int ReaderId;//读者账号，或者读者的名字
	time_t BorrowBookTime;//借阅起始时间
	time_t LatestReTime;//最晚的理应归还的时间，超过这个时间就会产生罚款
}BorrowBook;
typedef struct {
	int id;//借书的历史编号
	int ReaderId;
	int BookId;
	time_t StartBorrowTime;//开始借书的时间
	time_t ReturnBookTime;//图书归还时间
	int exist;//0表示这条历史记录被删除了，1表示存在
}BookRecord;
string getData(time_t& time);//
bool JudgeRenew(BookRecord& r);
bool SetRecordID(BorrowBook& bb, int ID, time_t& time1);
bool SetBName(Book& b, string n);
//Book.h
#include <vector>
#include <fstream>
//通过图书的Id号码查找这本书的唯一信息并且返回书籍信息
vector<Book> FindBookByBookID(int BookID);
//修改书籍信息，该函数只用于还书
void ModifyBookR(Book b, int n);//n=1表示书存量+1；n=0表示书存量-1

//CurRecord.h
/*添加记录到借书中*/
bool AddBookRecord(BorrowBook& borrowbook);
/*通过读者id查询借书表信息,可以查询自己的借书记录*/
vector<BorrowBook> getBorrowBookId(int readerId);
/*通过书籍的ID来查找借书记录*/
vector<BorrowBook> getRecordBybookID(int bookID);
/*通过记录的id号查询得到记录信息*/
vector<BorrowBook> getBorrowBookbyId(int id);
bool DeleteBorrowBook(int bookID);


//Display.h
//输出书籍的信息
void ShowBookone(vector<Book> b);
//输出用户的信息,选择性输出 密码或者借阅记录可以不输出？
void showReader(vector<Reader> user);
//输出借书的历史
/*当管理员查阅时，要输出读者的个人信息，
但是当读者查阅时，个人信息可以不用输出，
因此在这需要有个bool变量来控制*/
void showBorrowRecord(vector<BorrowBook> borrow, bool judge);
//输出历史的记录
void showBookRecord(vector< BookRecord> r, bool judge);

//FindRecord.h
//展示登陆后读者所有的当前借书记录，也就是没有归还的书籍？
//同时显示当前借阅书籍，超期的图书，罚款的金额，
void CurBorrowInf(int readerId);
//显示读者的所有借阅历史
//管理员也可以调用
void HisBorrowInf(int readerId);

//HisRecord.h
//用来查阅历史的借阅记录！可以对借阅记录进行删除
//会通过读者的ID和书籍的ID进行历史借阅记录的查找
//添加新的历史借阅记录
bool AddHisRecord(BookRecord& br);

//根据借阅记录所记录的id删除借阅记录：只是将extinct变量赋值为0，并不是真的删除 
bool DelHisRecord(int recordID);

//通过读者的ID来查找借阅记录
vector<BookRecord> FindHisRecordByReader(int readerID, int exist);

float fine(int a);

//通过书籍的ID来查找借阅记录
//书籍的ID是在book结构体中一类书的id
vector<BookRecord> FindHisRecordByBook(int bookID, int exist);

//通过借阅记录的id号码来查找记录！
//当然 id是历史记录中的id
vector<BookRecord> FindHisRecordByID(int id, int exist);

//ReaderFunc.h
vector<Reader> FindReaderById(int id);

//ReturnBook.h
//返回读者的借书记录，让读者输入他自己的借书记录的ID，借书记录要删除一条但是相应的借阅历史生成，馆藏量++
void ReturnBook(int ReaderID);

//续借
//void ReBrrowBook(int ReaderID);